文章同步於blog
今天我們來簡單介紹SOLID以外的兩個軟體開發原則
分別是DRY以及KISS
DRY,意旨Don't Repeat Yourself,也就是不要重複你自己
這非常的簡單,也就是少做重複的部分
我們可以將重複的部分將他轉換為共用的function在來使用
但絕對絕對不是不可以有任何重複的部分
而是指在相同的邏輯上,不要去重複使用
KISS, 意旨Keep It Simple, Stupid
KISS 原則的目標是確保軟體設計和開發過程不會變得過於困難,並降低錯誤和問題的風險。
這核心的概念就是,我們要將程式碼的邏輯盡可能的保持其他人一看就懂
在濃縮一下就是 - 大道至簡
There should be one-- and preferably only one --obvious way to do it.
- The Zen of Python
當你發現你的Code需要一而再再而三的向其他人解釋時,你最好還是重構比較好
例如說今天我們要判斷email是不是符合格式
比起用一大堆條件判斷,倒不如直接寫個正規表達式一行把它結束掉
import re
def validate_email_with_regex(email):
pattern = r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$'
if re.match(pattern, email):
return True
return False
不使用正規表達式,87%就會看到一大堆if-else在上面了...
忘了不曉得在哪看過,正規表示式其實是非常ugly,所以建議搭配好的註解說明正規表達示在驗什麼,最好再加上幾個範例
對不懂正規表示式的人的確是看不到是什麼鬼東西的一串字 XD
沒錯,如果不想解釋那麼多的話就把註解寫下去
雖然對於部分人,他們會覺得是看不懂的人的錯
正規表達式要寫長真的可以非常長,使他難以維護
但另一個更重要的事就是寫單元測試,相當於樓主說的範例
真的看不懂註解、程式碼的人
去執行過單元測試之後也有機會了解他實際上怎麼運作
我覺得就算懂的人還是要花很大的力氣去看懂 ,因為一般會放的可能不是身份證這種簡單版的,就像email:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
假設不幸要寫那麼長,那我還是那句老話。
寫單元測試,把例子寫上去
測試寫上去,寫得好大家也大概知道你想幹嘛
沒寫測試大概就會聽到一秒40句髒話了XD
不過不論是哪種寫法,通常會考慮到團隊其他人的屬性或是規定
就看團隊如何決定